Плохо! Плохо!:  0
Показано с 1 по 2 из 2

Тема: [MZ] DKR_PastMessagesViewer и DKR_ScrollableWindow

  1. #1
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию [MZ] DKR_PastMessagesViewer и DKR_ScrollableWindow

    Название плагинов: DKR_PastMessagesViewer и DKR_ScrollableWindow

    Автор: DarchanKaen

    Версия: 1.0.0 для MZ

    Дата выхода:
    1.0.0 - 04.09.2022

    Описание плагинов:
    DKR_PastMessagesViewer - плагин предназначен для сохранения Сообщений и последующего их отображения - как отдельными окнами, так и общим текстом (в указываемую переменную).
    ...Может быть полезен для чего-то вроде визуальных новелл / дневников / журнала.
    DKR_ScrollableWindow - плагин предназначен для замены логики окна Прокрутки текста с автоматической, на ручную прокрутку вверх-вниз.
    ...Может быть полезен для чего-то вроде записок.

    Использование плагинов, команды, параметры, "Как это выглядит":
    Скачайте демо и посмотрите в нем.

    Нюансы:
    1) По-умолчанию логика плагинов отключена и нужно включать специальной командой Скрипта. И выключать, когда / если она не нужна.
    2) DKR_PastMessagesViewer для хранения списка Сообщений использует переменную.
    3) DKR_ScrollableWindow рассчитан на стандартную высотку экрана (624), если высота у вас другая - играйтесь, подбирая параметр плагина; параметр отвечает за идентификацию высоты нижней границы экрана, после которой текст должен исчезать и окно закрываться.

    Код плагинов:

    Спойлер Версии 1.0.0:
    Спойлер DKR_PastMessagesViewer, версия 1.0.0:

    Код:
    var Imported = Imported || {};
    Imported.DKR_PastMessagesViewer = true;
    
    var DKR = DKR || {};          
    DKR.PastMessagesViewer = DKR.PastMessagesViewer || {}; 
    DKR.PastMessagesViewer.version = 1.0;
    
    
    //----------------------------------------------------------------------------
    /*:
     * @plugindesc (v.1.0.0) Плагин предназначен для сохранения Сообщений и
     *  последующего их отображения - как отдельными окнами, так и общим текстом.
     * 
     * @target MZ
     * @author DarchanKaen
     *
     * @help
     *   DKR PastMessagesViewer
     * ----------------------------------------------------------------------------
     * ---Общая информация:
     * @help Плагин предназначен для сохранения Сообщений и
     *  последующего их отображения - как отдельными окнами, 
     *  так и общим текстом (для Прокрутки текста).
     *  Для корректной работы доступности Сообщений, используется переменная, 
     *  хранящая список Сообщений (по-умолчанию №8).
     * Для включения / отключения записи - используется соотв-я команда Скрипта!
     * ---Команды(в эвенте команда "Скрипт"):
     * DKR.PastMessagesViewer.saveMessagesToPast(isSave); - включить / выключить запись Сообщений; по-умолчанию отключена!.
     * DKR.PastMessagesViewer.getPastMessagesCount(); - получить кол-во записанных Сообщений.
     * DKR.PastMessagesViewer.setPastMessagesToVar(varId, name);  - записать в указанную переменную текста ВСЕХ Сообщений, или с заданным именем.
     * DKR.PastMessagesViewer.showPastMessage(pastMessageId); - показать окно конкретного Сообщения.
     * DKR.PastMessagesViewer.clear(); - очистить список Сообщений.
     * где:
     * isSave - true (нужно записывать Сообщений) или false (не нужно записывать Сообщения).
     * varId - номер переменной, в которую вывести текста и имя всех сообщений.
     * name - имя говорящего, если интересую Сообщений только одного Персонажа.
     *  Можно не указывать, тогда выводятся все записанные Сообщения.
     * pastMessageId - номер, по-порядку, конкретного сообщения; начинается с 1 и выводится окном.
     * ----------------------------------------------------------------------------
     *
     * @param toSavePastMessagesVarId
     * @type variable
     * @desc Номер переменной для сохранения списка Сообщений
     * @default 8
     *
     * @param nameEndSymbol
     * @type text
     * @desc Символ, следующий после имени
     * @default :
     *
     * @param textEndSymbols
     * @type text
     * @desc Символ, разделающий сообщения
     * @default ~~~
     *
     */
    
    
    (() => {
    	
    //--------DATA
    	const params = PluginManager.parameters('DKR_PastMessagesViewer');
    
    	const NAME_END_MARK = params['nameEndSymbol'] || ':';
    	const TEXT_END_MARK = params['textEndSymbols'] || '~~~';
    	const PAST_MESSAGES_LIST_VAR_ID = Number(params['toSavePastMessagesVarId']) || 8;
    	
    	let isSaveMessagesToPast = false;
    	let messageNumber = 0;
    	let currentText = '';
    	
    	
    //--------LOGIC
    	const setPastMessagesInVar = (varId, targetName = 'NONE') => {
    		let messagesUnitedList = $gameVariables.value(PAST_MESSAGES_LIST_VAR_ID) || [];
    		let pastMessagesList = messagesUnitedList;
    		let messagesStr = '';
    		if('NONE' !== targetName){
    			if(targetName.length >= 1){
    				pastMessagesList = messagesUnitedList.filter( pastMessage => targetName === pastMessage.mParams[4]);
    			}else{
    				console.log('DKR.PastMessagesViewer_ERROR: pastMessageName length~' + targetName + '~ is less than 1 symbol!');
    			}
    		}
    		for(let n = 0; n < pastMessagesList.length; n++){
    			let currentMessageData = pastMessagesList[n];
    			let currentMessageName = currentMessageData.mParams[4] + NAME_END_MARK + '\n';
    			let currentMessageText = currentMessageData.mText;
    			if(currentMessageName.length <= 2){
    				currentMessageName = '';
    			}
    			let currentMessageNamedText = currentMessageName + currentMessageText + TEXT_END_MARK;
    			messagesStr += currentMessageNamedText + '\n';
    		}
    		$gameVariables.setValue(varId, messagesStr);
    	}
    	
    	const showPastMessageByIndex = (pastMessageId) => {
    		let messagesUnitedList = $gameVariables.value(PAST_MESSAGES_LIST_VAR_ID) || [];
    		pastMessageId -= 1;
    		if(pastMessageId < 0){
    			console.log('DKR.PastMessagesViewer_ERROR: pastMessageId~' + pastMessageId + '~ is less than zero!');
    			return;
    		}else if(pastMessageId >= messagesUnitedList.length){
    			console.log('DKR.PastMessagesViewer_ERROR: pastMessageId~' + pastMessageId + '~ is greater than past messages count!');
    			return;
    		}
    		let pastMessageData = messagesUnitedList[pastMessageId];
    		let pastMessageParams = pastMessageData.mParams;
    		let pastMessageText = pastMessageData.mText;
    		showMessage(pastMessageParams, pastMessageText);
    	}
    	
    	const showMessage = (params, text) => {
    		$gameMessage.setFaceImage(params[0], params[1]);
    		$gameMessage.setBackground(params[2]);
    		$gameMessage.setPositionType(params[3]);
    		$gameMessage.setSpeakerName(params[4]);
    		$gameMessage.add(text);
    	}
    	
    	const getPastMessagesLength = () => {
    		let messagesUnitedList = $gameVariables.value(PAST_MESSAGES_LIST_VAR_ID) || [];
    		return messagesUnitedList.length;
    	}
    
    //--------CHANGED CORE (ALIASES)
    	DKR_ScrollableMessages_Game_Message_add = Game_Message.prototype.add;
    	Game_Message.prototype.add = function(text) {
    		DKR_ScrollableMessages_Game_Message_add.call(this, text);
    		if(true === isSaveMessagesToPast){
    			currentText += text + '\n';
    		}
    	};
    	
    	DKR_ScrollableMessages_Game_Interpreter_command101 = Game_Interpreter.prototype.command101;
    	Game_Interpreter.prototype.command101 = function(params) {
    		DKR_ScrollableMessages_Game_Interpreter_command101.call(this, params);
    		if(true === isSaveMessagesToPast){
    			let currentMessageData = { mNumber:messageNumber, mParams:params, mText:currentText };
    			let messagesUnitedList = $gameVariables.value(PAST_MESSAGES_LIST_VAR_ID) || [];
    			messagesUnitedList.push(currentMessageData);
    			$gameVariables.setValue(PAST_MESSAGES_LIST_VAR_ID, messagesUnitedList);
    			currentText = '';
    			messageNumber++;
    		}
    	}
    	
    
    //--------COMMANDS	
    	DKR.PastMessagesViewer.saveMessagesToPast = function(isSave){
    		isSaveMessagesToPast = isSave;
    	}
    	
    	DKR.PastMessagesViewer.getPastMessagesCount = function(){
    		let pastMessagesCount = getPastMessagesLength();
    		return pastMessagesCount;
    	}
    	
    	DKR.PastMessagesViewer.setPastMessagesToVar = function(varId, name){
    		setPastMessagesInVar(varId, name);
    	}
    	
    	DKR.PastMessagesViewer.showPastMessage = function(pastMessageId){
    		showPastMessageByIndex(pastMessageId);
    	}
    	
    	DKR.PastMessagesViewer.clear = function(){
    		messagesUnitedList = [];
    		$gameVariables.setValue(PAST_MESSAGES_LIST_VAR_ID, messagesUnitedList);
    		currentText = '';
    		messageNumber = 0;
    	}
    	
    	
    })();


    Спойлер DKR_ScrollableWindow, версия 1.0.0:

    Код:
    var Imported = Imported || {};
    Imported.DKR_ScrollableWindow = true;
    
    var DKR = DKR || {};          
    DKR.ScrollableWindow = DKR.ScrollableWindow || {}; 
    DKR.ScrollableWindow.version = 1.0;
    
    
    //----------------------------------------------------------------------------
    /*:
     * @plugindesc (v.1.0.0) Плагин предназначен для замены логики окна Прокрутки текста
     * с автоматической, на ручную прокрутку вверх-вниз.
     * 
     * @target MZ
     * @author DarchanKaen
     *
     * @help
     *   DKR ScrollableWindow
     * ----------------------------------------------------------------------------
     * ---Общая информация:
     * @help Плагин предназначен для замены логики окна Прокрутки текста
     *  с автоматической, на ручную прокрутку вверх-вниз.
     * Плагин рассчитан на стандартную высоту экрана (624), если у вас иная - меняйте
     * параметр modY.
     * ---Команды(в эвенте команда "Скрипт"):
     * DKR.ScrollableWindow.setScroll(isScroll); - включить/выключить возможность ручной прокрутки текста.
     * где:
     * isScroll - true (нужно крутить вручную) или 
     * false (не нужно крутить вручную, включает стандартную логику мейкера).
     * ----------------------------------------------------------------------------
     *
     * @param modY
     * @type number
     * @desc Параметр, от которого зависит закрытия окна по достижения текстом низа экрана.
     * @default 30
     *
     */
    
    
    (() => {
    
    
    //--------DATA:
    	const params = PluginManager.parameters('DKR_ScrollableWindow');
    	const MOD_Y = Number(params['modY']) || 30;
    	
    	let isWindowScrollable = false;
    	
    	
    //--------CHANGED CORE:
    	Window_ScrollText.prototype.refresh = function() {
    		this._allTextHeight = this.textSizeEx(this._text).height;
    		this.createContents();
    		if(false === isWindowScrollable){
    			this.origin.y = -this.height;
    		}else if(true === isWindowScrollable){ //--DKR_edit: begin!
    			this.origin.y = 0;
    		} //--DKR_edit: end!
    		const rect = this.baseTextRect();
    		this.drawTextEx(this._text, rect.x, rect.y, rect.width);
    	};
    	
    	
    	Window_ScrollText.prototype.updateMessage = function() {
    		if(false === isWindowScrollable){
    			    this.origin.y += this.scrollSpeed();
    				if (this.origin.y >= this.contents.height) {
    					this.terminateMessage();
    				}
    		}else if(true === isWindowScrollable){ //--DKR_edit: begin!
    			if(true === Input.isTriggered("ok")){
    				this.terminateMessage();
    			}
    			if(true === Input.isPressed("down")){
    				this.origin.y -= this.scrollSpeed();
    				if (this.origin.y <= (-Graphics.boxHeight + MOD_Y)) {
    					this.terminateMessage();
    				}
    			}
    			if(true === Input.isPressed("up")){
    				this.origin.y += this.scrollSpeed();
    				if (this.origin.y >= this.contents.height) {
    					this.terminateMessage();
    				}
    			}
    		} //--DKR_edit: end!	
    	};
    	
    	
    //--------COMMANDS:
    	DKR.ScrollableWindow.setScroll =  function(isScroll){
    		isWindowScrollable = isScroll;
    	}
    	
    	
    })();



    Загрузка демо:


    Условия поставки плагинов:
    Поставляется AS-IS.
    Вся ответственность при использовании - на Пользователе!
    !

    Совместимость:
    Могут быть не совместимы с другими плагинами на запись сообщений и логику Прокрутки текста.

    Спойлер Лирическое отступление:
    Некоторое время плагины я делать не буду.
    Оттого тут аж демо. =)


    Благодарности:
    Phileas , Alx_Yago , Seibur
    Последний раз редактировалось Darchan Kaen; 04.09.2022 в 22:16. Причина: Добавлен нюанс

  2. #2
    Создатель Аватар для Рольф
    Информация о пользователе
    Регистрация
    14.04.2008
    Адрес
    Южно- Сахалинск/Пенза
    Сообщений
    10,146
    Записей в дневнике
    2
    Репутация: 108 Добавить или отнять репутацию

    По умолчанию

    А тут без скринов я не ободряю.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
[MZ] DKR_PastMessagesViewer и DKR_ScrollableWindow